home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / FFIND.F < prev    next >
Text File  |  1980-01-01  |  3KB  |  158 lines

  1. ;Find program for multiple file search.
  2. var ok,day,month,year,hour,minute
  3. name ? 15
  4. #inpend=0
  5. #short
  6.  
  7. proc print_two(number)
  8.     {
  9.     number=(number mod 10)+(number/10)*16
  10.     printhb bios number;
  11.     }
  12.  
  13. proc print_date
  14.     {
  15.     print_two(day)
  16.     print bios "-";
  17.     print_two(month)
  18.     print bios "-";
  19.     print_two(year);
  20.     }
  21.  
  22. proc print_time
  23.     {
  24.     print_two(hour)
  25.     print bios ":";
  26.     print_two(minute)
  27.     }
  28.  
  29. on error
  30.     {
  31.     print bios
  32.     error msg "\dos.err"
  33.     print bios "!"
  34.     stop
  35.     }
  36.  
  37. curtoloc
  38. print "FFIND by Peter Campbell, v4."
  39.  
  40. m=allocate 4096
  41. print "Which files: ";
  42. loctocur
  43. inputs path
  44. if peekb (path+2)=0 then error 999
  45. print cr "Look for: ";
  46. loctocur
  47. inputs table
  48. if peekb (table+2)=0 then error 999
  49. print
  50. find first path+2
  51. goto entry
  52.  
  53. loop:
  54. find next
  55. entry:
  56. moveb 15 from dta segment|dta offset+30 to name
  57. time=peek dta segment|(dta offset+16h)
  58. date=peek dta segment|(dta offset+18h)
  59. curtoloc
  60. print "File: ";
  61. prints name,0:print "        ";
  62. open #1,name:re=read #1,65535 to m|0:close #1
  63. m[re]b=26
  64. x=0:first=1:lno=1:slno=0
  65.  
  66. look:
  67. f=x
  68. while m[f]b<>26
  69.     {
  70.     c=m[f]b
  71.     if c=13 then lno++:slno=f+2
  72.     if c=peekb (table+2) then goto look_found
  73.     f++
  74.     }
  75. goto next_one
  76.  
  77. look_found:
  78. ss=f
  79. gosub look_for_name
  80. #long
  81. if ok then
  82.     {
  83.     #short
  84.     #long
  85.     if first then
  86.     {
  87.     #short
  88.     print bios "File: ";
  89.     mx=name:while peekb mx print bios chr peek mx;:mx++
  90.     day=date and 31
  91.     month=(date/32) and 15
  92.     year=(date/512)+80
  93.     hour=(time/2048)
  94.     minute=(time/32) and 63
  95.     print bios "  ";:print_date
  96.     print bios "  ";:print_time
  97.     print bios:first=0
  98.     }
  99.     print bios "  ";lno;" ";
  100.     word=slno
  101.     col=0
  102.     while m[word]b<>13
  103.     {
  104.     if m[word]b=9 then
  105.         {
  106.         xx=(col and 248)+8
  107.         repeat xx-col print bios " ";
  108.         col=xx
  109.         }
  110.     else print bios chr m[word];:col++
  111.     word++
  112.     }
  113.     f=word+1
  114.     print bios
  115.     lno++:slno=f+1
  116.     #long
  117.     }
  118. #short
  119. next_search:
  120. x=f+1
  121. goto look
  122.  
  123. next_one:
  124. if not first then print bios
  125. test break
  126. goto loop
  127.  
  128. look_for_name:
  129. ok=0
  130. st=table+2
  131. xs=ss
  132.  
  133. forever
  134.     {
  135.     next_sb:
  136.     c=m[xs]b
  137.     sb=peekb st
  138.     if sb=0 then ok=1:return
  139.     if sb=' ' then
  140.     {
  141.     if m[xs]b<>' ' then return
  142.     reano:
  143.     while m[xs]b=' ' xs++
  144.     if m[xs]b=9 then xs++:goto reano
  145.     st++:goto next_sb
  146.     }
  147.     if sb='?' then xs++:st++:goto next_sb
  148.     if c<>peekb st then return
  149.     st++
  150.     xs++
  151.     }
  152.  
  153. path:
  154. string 30
  155.  
  156. table:
  157. string 50
  158.